const mysql = require('mysql2/promise'); // 使用 promise 版本的 mysql2

async function initDatabase() {
  try {
    console.log("🔧 开始初始化数据库...");

    // 1️⃣ 连接 MySQL 服务器（不指定数据库）
    const connection = await mysql.createConnection({
      host: 'localhost',
      user: 'root',
      password: '123456' // 你的 MySQL 密码
    });

    // 2️⃣ 创建数据库（如果不存在）
    await connection.query("CREATE DATABASE IF NOT EXISTS qcc CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;");
    console.log("✅ 数据库 qcc 已创建（如果之前不存在）");

    // 3️⃣ 断开连接
    await connection.end();

    // 4️⃣ 重新连接 `qcc` 数据库
    const db = await mysql.createConnection({
      host: 'localhost',
      user: 'root',
      password: '123456',
      database: 'qcc'
    });

    // 5️⃣ 创建 `admins` 表（管理员账号）
    await db.execute(`
      CREATE TABLE IF NOT EXISTS admins (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE,
        password VARCHAR(255) NOT NULL
      );
    `);

    // 6️⃣ 创建 `users` 表（普通用户）
    await db.execute(`
      CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE,
        password VARCHAR(255) NOT NULL
      );
    `);

    // 7️⃣ 创建 `enterprises` 表（企业信息）
    await db.execute(`
      CREATE TABLE IF NOT EXISTS enterprises (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(255) NOT NULL,
        industry VARCHAR(255),
        credit_code VARCHAR(18) UNIQUE,
        registered_capital DECIMAL(15,2),
        legal_person VARCHAR(100),
        address VARCHAR(255),
        establish_date DATE
      );
    `);

    // 8️⃣ 创建 `enterprise_relations` 表（存储 JSON 格式的股权穿透数据）
    await db.execute(`
      CREATE TABLE IF NOT EXISTS enterprise_relations (
        id INT AUTO_INCREMENT PRIMARY KEY,
        enterprise_id INT NOT NULL,
        relations TEXT,
        FOREIGN KEY (enterprise_id) REFERENCES enterprises(id) ON DELETE CASCADE
      );
    `);

    // 9️⃣ 插入默认管理员账号（用户名: admin，密码: admin）
    await db.execute(`
      INSERT INTO admins (username, password) 
      VALUES ('admin', 'admin') 
      ON DUPLICATE KEY UPDATE password = VALUES(password);
    `);
    console.log("✅ 默认管理员账号已创建（admin/admin）");

    console.log("✅ 数据库初始化完成！");
    await db.end();
    process.exit();
  } catch (err) {
    console.error("❌ 数据库初始化失败:", err);
    process.exit(1);
  }
}

// 执行初始化
initDatabase();
